home *** CD-ROM | disk | FTP | other *** search
/ Amiga Games: Greatest Hits 1996 / Amiga Games: Greatest Hits 1996.iso / archive / userbox / publicdomain / edspell.lha / EdSpell / Rexx / SpellDocument.epxx < prev    next >
Text File  |  1996-07-27  |  6KB  |  215 lines

  1. /************************************************************************/
  2. /*                                                                      */
  3. /*     File : SpellDocument.epxx                                        */
  4. /*   Author : Martin Reddy                                              */
  5. /*  Version : 1.2                                                       */
  6. /*     Date : 12/1/95                                                   */
  7. /*  Purpose : An ARexx script used to control the text editor EdWord    */
  8. /*     Note : This is part of the Spell Checking facility of EdWord     */
  9. /* Function : This script file will check the spelling for the entire   */
  10. /*            document (from the cursor position or top of file - see   */
  11. /*            below for customisation)                                  */
  12. /*  Updates : [27/7/96] - Cleaned up ProgInd, added more error checking */
  13. /*                                                                      */
  14. /************************************************************************/
  15.  
  16.     /* Set IGNORE_VALID_ROOTS to TRUE if you want the spell check to
  17.        ignore words which aren't in the dictionary, but do have a
  18.        valid root, e.g. ignore WASTED if the word WASTE exists in the
  19.        dictionary. This reduces the need to have every tense of a
  20.        word, and plurals, to be explicitly stored in the dictionary */
  21.         
  22.     IGNORE_VALID_ROOTS = TRUE
  23.  
  24.     /* Set CHECK_FROM_CURSOR to TRUE to make the spell check perform
  25.        from the current cursor position to the end of file. If you 
  26.        set it to FALSE, then the spell check will be performed from
  27.        the very start of the file to then end, i.e. the entire file */
  28.  
  29.     CHECK_FROM_CURSOR = TRUE
  30.  
  31.                                       
  32.     /*-------------- Nothing To Change Below Here -----------*/
  33.  
  34.     HOST = ADDRESS()
  35.     ADDRESS VALUE HOST
  36.  
  37.     OPTIONS RESULTS
  38.  
  39.     /********** Make sure that the ISpell process is up *********/
  40.  
  41.     IF ~SHOW( PORTS, 'IRexxSpell' ) THEN DO
  42.         Message "Loading Dictionary..."
  43.         ADDRESS COMMAND 'run <nil: >nil: EdSpell:ISpell/ispell -r >nil: <nil:'
  44.         ADDRESS COMMAND 'EdSpell:ISpell/WaitForPort IRexxSpell'
  45.         IF RC ~= 0 THEN DO
  46.             Inform "Could Not Start ISpell Process|Spell Check Aborted!"
  47.             Message ""
  48.             EXIT
  49.         END
  50.     END
  51.  
  52.     /**************** Get a Word From The User *****************/
  53.  
  54.  
  55.     MODE = "From Cursor"
  56.     IF CHECK_FROM_CURSOR ~= TRUE THEN DO
  57.         MoveBOF
  58.         MoveBOL
  59.         MODE = "From Top of File"
  60.     END
  61.  
  62.     GetChar
  63.     IF RESULT <= " " THEN MoveNextWord
  64.  
  65.     Message "Spell Checking Document ("||MODE||")..."
  66.     SetView OFF
  67.     ProgressIndicator
  68.  
  69.     GetEOLWrap; EOLSAVE=RESULT; SetEOLWrap ON
  70.     GetWord
  71.     DO FOREVER
  72.         IF RC ~= 0 THEN LEAVE
  73.         WORD = UPPER(RESULT)
  74.  
  75.         SetIndicatorFile
  76.  
  77.         CALL CheckWord(WORD)
  78.  
  79.         GetNextWord
  80.     END
  81.  
  82.     /**************** All done now: quit... ****************/
  83.  
  84.     CALL CloseDown
  85.     Inform "End of Document Reached|Spell Check Completed."
  86.     EXIT
  87.  
  88.     /************ PROCEDURE: "CloseDown" ************/
  89.  
  90.     CloseDown: PROCEDURE EXPOSE EOLSAVE
  91.         Message ""
  92.         SetEOLWrap EOLSAVE
  93.         ProgressIndicator
  94.         SetView ON
  95.     RETURN
  96.  
  97.     /************ PROCEDURE: "AbortSpellCheck" ************/
  98.  
  99.     AbortSpellCheck: PROCEDURE
  100.         CHOICE "Do You Really Want To|Terminate This Spell Check?@@Yes, Stop|No, Continue"
  101.         IF RC == 1 THEN DO
  102.             BlockOff
  103.             CALL CloseDown
  104.             EXIT
  105.         END
  106.         MovePrevWord
  107.     RETURN
  108.  
  109.     /************ PROCEDURE: "HighlightWord" ************/
  110.  
  111.     HighlightWord: PROCEDURE
  112.         MoveRight
  113.         MovePrevWord
  114.         BlockStart
  115.         MoveNextWord
  116.         BlockEnd
  117.         MovePrevWord
  118.         ProgressIndicator
  119.         SetView ON
  120.     RETURN
  121.  
  122.     /************ PROCEDURE: "AddWord(word)" ************/
  123.  
  124.     AddWord: PROCEDURE
  125.     PARSE ARG THEWORD
  126.         Choice "Please Confirm The Addition of|"||THEWORD||" To The Dictionary.@@Add Word|Cancel"
  127.         IF RC ~= 0 THEN DO
  128.             ADDRESS "IRexxSpell" ADD THEWORD
  129.         END
  130.     RETURN
  131.  
  132.     /************** PROCEDURE: TurnOffView ****************/
  133.  
  134.     TurnOffView: PROCEDURE
  135.         BlockOff
  136.         Message "Spell Checking Document..."
  137.         SetView OFF
  138.         ProgressIndicator
  139.     RETURN
  140.  
  141.     /************ PROCEDURE: "CheckWord(word)" ************/
  142.  
  143.     CheckWord: PROCEDURE EXPOSE IGNORE_VALID_ROOTS
  144.     PARSE ARG SEARCHWORD
  145.  
  146.         SEARCHWORD = COMPRESS( SEARCHWORD, '~`,./<>?;:"[]{}!@#$%^&*()+|=\- ' )
  147.         IF SEARCHWORD == '' THEN RETURN
  148.  
  149.         INTERACT = FALSE
  150.  
  151.         ADDRESS "IRexxSpell" CHECK SEARCHWORD
  152.         WORD = RESULT
  153.  
  154.         IF WORD == "*" THEN DO
  155.             RETURN
  156.         END; ELSE IF LEFT(WORD,1) == "+" THEN DO
  157.             IF IGNORE_VALID_ROOTS == TRUE THEN RETURN
  158.             CALL HighlightWord
  159.             PARSE VAR WORD DUMMY ROOT
  160.             Choice SEARCHWORD" Is A Valid Combination|But Is Not In Dictionary|(Root Word Is:"||ROOT||")@@Ignore|Stop|Add Word"
  161.             IF RC == 0 THEN DO
  162.                 CALL AddWord(SEARCHWORD)
  163.             END; ELSE IF RC == 2 THEN DO
  164.                 CALL AbortSpellCheck
  165.             END
  166.             CALL TurnOffView
  167.         END; ELSE IF LEFT(WORD,1) == "&" THEN DO
  168.             CALL HighlightWord
  169.             PARSE VAR WORD DUMMY SUGA SUGB SUGC SUGD SUGE
  170.  
  171.             SUG = "|1) "SUGA
  172.             IF (SUGB ~= "END") & (SUGB ~= "") & (SUGB ~= "SUGB") THEN DO
  173.                 SUG = SUG||"|2) "||SUGB
  174.             END
  175.             IF (SUGC ~= "END") & (SUGC ~= "") & (SUGC ~= "SUGC") THEN DO
  176.                 SUG = SUG||"|3) "||SUGC
  177.             END
  178.             IF (SUGD ~= "END") & (SUGD ~= "") & (SUGD ~= "SUGD") THEN DO
  179.                 SUG = SUG||"|4) "||SUGD
  180.             END
  181.  
  182.             INTERACT = TRUE
  183.             PROMPT = "'"||SEARCHWORD||"' Not In Dictionary|Possible Suggestions Are:|"||SUG
  184.         END; ELSE DO
  185.             CALL HighlightWord
  186.             INTERACT = TRUE
  187.             PROMPT = "'"||SEARCHWORD||"' Not In Dictionary|No Possible Suggestions Found"
  188.         END
  189.  
  190.         IF INTERACT == TRUE THEN DO
  191.             Choice PROMPT||"@@Ignore|Add/Edit|Stop"
  192.             IF RC == 0 THEN DO
  193.                 CALL AbortSpellCheck
  194.             END; ELSE IF RC == 2 THEN DO
  195.                 Choice "Word = '"||SEARCHWORD||"'||  Edit = Edit Current Word     |   Add = Add Word To Dictionary|Cancel = Continue Spell Check  @@Edit|Add|Cancel"
  196.  
  197.                 IF RC == 1 THEN DO
  198.                     GetInput "Type New Spelling For Word (Blank=Abort)"
  199.                     NEWWORD = RESULT
  200.                     IF NEWWORD ~= "RESULT" & NEWWORD ~= "" THEN DO
  201.                         DeleteWord
  202.                         InsertText D2C(34)||NEWWORD||" "||D2C(34)
  203.                         MovePrevWord
  204.                     END
  205.                 END; ELSE IF RC == 2 THEN DO
  206.                     CALL AddWord(SEARCHWORD)
  207.                 END
  208.  
  209.             END
  210.             CALL TurnOffView
  211.         END
  212.  
  213.     RETURN
  214.  
  215.